#include <stdio.h>
char func(void);
int main()
{
    // 1、浮点数赋值给整数变量
    // 浮点数赋予整数变量时，C 语言直接丢弃小数部分，而不是四舍五入。
    int x = 3.14;
    printf("x = %d\n", x); // 输出3

    // 2、整数赋值给浮点数变量
    // 整数赋值给浮点数变量时，会自动转为浮点数
    float y = 12 * 2;
    printf("y = %f\n", y); // 输出24.000000

    // 3、窄类型赋值给宽类型
    // 字节宽度较小的整数类型，赋值给字节宽度较大的整数变量时，会发生类型提升，即窄类型自动转为宽类型。
    // char x = 10;
    // int i = x;
    // printf("i = %d\n", i); // 输出34

    // 4、宽类型赋值给窄类型
    // 字节宽度较大的类型，赋值给字节宽度较小的变量时，会发生类型降级，自动转为后者的类型。这时可能会发生截值（truncation），
    // 系统会自动截去多余的二进制位，导致难以预料的结果。

    // 5、整数与浮点数混合运算时，整数转为浮点数类型，与另一个运算数类型相同
    int a = 10;
    float b = 3.14f;
    float c = a + b;       // a自动转为float类型
    printf("c = %f\n", c); // 输出13.140000

    // 6、函数的参数和返回值，会自动转成函数定义里指定的类型。
    char ch = func();
    printf("ch = %d\n", ch); // 输出42
    printf("ch = %c\n", ch); // 输出42

    // 7、类型的显式转换
    int m = 10;
    int n = 3;
    float z = (float)m / n; // 强制把m转换为float类型
    printf("z = %f\n", z);  // 输出3.333333
}
char func(void)
{
    int a = 65;
    return a;
}